#ifndef COMMON_H
#define COMMON_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h> // 信号量头文件

#define SHM_SIZE 1024
#define KEY_PATH "."
#define SHM_KEY 'a' // 共享内存键
#define SEM_KEY 'b' // 信号量键

// 共享内存结构体（仅数据，同步由信号量负责）
typedef struct
{
    char data[SHM_SIZE];
} SharedMemory;

// 信号量操作宏（简化semop调用）
union semun
{
    int val;               // 用于SETVAL
    struct semid_ds *buf;  // 用于IPC_STAT、IPC_SET
    unsigned short *array; // 用于GETALL、SETALL
} sem_union;

int sem_op(int sem_id, int sem_num, int op_val)
{
    struct sembuf sem_buf = {sem_num, op_val, 0}; // 0表示阻塞等待
    return semop(sem_id, &sem_buf, 1);
}

#endif